package com.cskaoyan.javase.oop1._9read;
/**
 * 读程序题
 *
 * @since 17:31
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        Student s = new Student(18, "长风");
        // 18
        System.out.println(s.age);
        // 长风
        System.out.println(s.name);
        // 20
        System.out.println(s.var);
        // 1000.0
        System.out.println(s.cat.price);
    }
}
class Student {
    int age = 10;
    String name = "张三";
    double var = 20;

    public Student(int age) {
        System.out.println("Student age");
        this.age = age;
    }

    public Student() {
    }

    public Student(int age, String name) {
        this(age);
        System.out.println("Student age,name");
        this.name = name;
    }

    // 引用数据类型成员变量的显式赋值 其实它和int a = 10;没有本质区别,区别在于这个成员变量的显式赋值需要创建Cat对象
    // 整个创建Cat对象的过程都是成员变量的显式赋值的过程,所以这个过程的输出,肯定是先于本类Student的构造器输出的
    Cat cat = new Cat(1000);
    Cat c2;
    // 这个代码放开,程序如何运行?
    // 会一直调用自身的无参构造器,一直递归调用,最终栈溢出
    // Student s = new Student();
}

class Cat {
    double price;

    public Cat() {
    }

    public Cat(double price) {
        System.out.println("Cat price");
        this.price = price;
    }
}